#include <54func.h>
int main(int argc,char *argv[])
{
    // ./5_azhen 1.pipe 2.pipe
    ARGS_CHECK(argc,3);
    int fdw = open(argv[1],O_WRONLY);
    ERROR_CHECK(fdw,-1,"open write");
    int fdr = open(argv[2],O_RDONLY);
    ERROR_CHECK(fdr,-1,"open read");
    printf("azhen is connected!\n");
    char buf[4096] = {0};
    fd_set rdset;//为文件描述符集合申请内存
    while(1)
    {
        FD_ZERO(&rdset);//将文件描述符集合设置为监听集合
        //把可能阻塞进程的操作添加到监听集合，进行监听
        FD_SET(fdr,&rdset);
        FD_SET(STDIN_FILENO,&rdset);
        //监听
        select(fdr+1,&rdset,NULL,NULL,NULL);
        //根据不同的监听集合去执行不同的操作
        if(FD_ISSET(fdr,&rdset)){  //说明管道中发来消息，需要读取
            memset(buf,0,sizeof(buf));
            ssize_t sret = read(fdr,buf,sizeof(buf));//从管道中读取数据
            if(sret == 0){//ctrl + c 杀死进程
                printf("azhen is out！\n");
                break;
            }
            printf("aqiang：%s\n",buf);
        }else if(FD_ISSET(STDIN_FILENO,&rdset))//用户通过标准输入，输入消息，发送给阿强
        {
            memset(buf,0,sizeof(buf));
            ssize_t sret = read(STDIN_FILENO,buf,sizeof(buf));//从标准输入中读取输入的数据，在写入到管道中
            //如果你在输入的过程中，按下ctrl+d,那么读文件的返回值也是0，也告诉下线
            if(sret == 0){
                write(fdw,"see you !\n",9);
                break;
            }
            write(fdw,buf,strlen(buf));//有多少写多少！
        }
        //阿强发信息给阿珍     2.pipe：用于强->珍   1.pipe：用于珍->强
        //memset(buf,0,sizeof(buf));//每次读写之前，都先对缓存进行清理
        //read(fdr,buf,sizeof(buf));
        //printf("aqiang：%s\n",buf);//这一句直接向读取的消息输入到标准输出文件中，因此不需要再写，给自己都绕晕了
        //把收到的信息打印在标准输出，啊珍发消息给啊强，用户从标准输入中输入信息，然后将标准输入信息读取到管道，在写过去
       // memset(buf,0,sizeof(buf));
        //read(STDIN_FILENO,buf,sizeof(buf));
        //write(fdw,buf,strlen(buf));
    }
    close(fdr);
    close(fdw);
    return 0;
}
